<?xml version="1.0" encoding="UTF-8"?>
<!--
    XDR (XML-Data Reduced) datatypes implementation

    Copyright 2010 Adam Martinson for CodeWeavers

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-->
<xsd:schema xmlns="urn:schemas-microsoft-com:datatypes"
            xmlns:dt="urn:schemas-microsoft-com:datatypes"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:schemas-microsoft-com:datatypes"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">

    <xsd:simpleType name="bin.base64">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:base64Binary

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:base64Binary"/>
    </xsd:simpleType>

    <xsd:element name="bin.base64" type="dt:bin.base64"/>

    <xsd:simpleType name="bin.hex">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:hexBinary

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:hexBinary"/>
    </xsd:simpleType>

    <xsd:element name="bin.hex" type="dt:bin.hex"/>

    <xsd:simpleType name="boolean">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:boolean

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:boolean"/>
    </xsd:simpleType>

    <xsd:element name="boolean" type="dt:boolean"/>

    <xsd:simpleType name="char">
        <xsd:annotation>
            <xsd:documentation>

                Single unicode char

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:string">
            <xsd:length value="1"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:element name="char" type="dt:char"/>

    <xsd:simpleType name="date">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:date with no timezone

                TODO: restrict -> force no timezone

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:date"/>
    </xsd:simpleType>

    <xsd:element name="date" type="dt:date"/>

    <xsd:simpleType name="date.tz">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:date with timezone

                TODO: restrict -> force timezone

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:date"/>
    </xsd:simpleType>

    <xsd:element name="date.tz" type="dt:date.tz"/>

    <xsd:simpleType name="dateTime">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:dateTime with no timezone

                TODO: restrict -> force no timezone

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:dateTime"/>
    </xsd:simpleType>

    <xsd:element name="dateTime" type="dt:dateTime"/>

    <xsd:simpleType name="dateTime.tz">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:dateTime with timezone

                TODO: restrict -> force timezone

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:dateTime"/>
    </xsd:simpleType>

    <xsd:element name="dateTime.tz" type="dt:dateTime.tz"/>

    <xsd:simpleType name="entity">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:ENTITY

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:ENTITY"/>
    </xsd:simpleType>

    <xsd:element name="entity" type="dt:entity"/>

    <xsd:simpleType name="entities">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:ENTITIES

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:ENTITIES"/>
    </xsd:simpleType>

    <xsd:element name="entities" type="dt:entities"/>

    <xsd:simpleType name="enumeration">
        <xsd:annotation>
            <xsd:documentation>

                Valid for attributes only
                dt:values is equivalent to xsd:list

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>

    <xsd:simpleType name="fixed.14.4">
        <xsd:annotation>
            <xsd:documentation>

                Fixed-length decimal floating-point value
                Up to 14 digits before the decimal point
                Up to 4 digits after the decimal point

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:decimal">
            <xsd:pattern value="([0-9]{,14})([.][0-9]{,4})?"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:element name="fixed.14.4" type="dt:fixed.14.4"/>

    <xsd:simpleType name="float">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:decimal

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:decimal"/>
    </xsd:simpleType>

    <xsd:element name="float" type="dt:float"/>

    <xsd:simpleType name="i1">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:byte

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:byte"/>
    </xsd:simpleType>

    <xsd:element name="i1" type="dt:i1"/>

    <xsd:simpleType name="i2">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:short

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:short"/>
    </xsd:simpleType>

    <xsd:element name="i2" type="dt:i2"/>

    <xsd:simpleType name="i4">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:int

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:int"/>
    </xsd:simpleType>

    <xsd:element name="i4" type="dt:i4"/>

    <xsd:simpleType name="i8">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:long

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:long"/>
    </xsd:simpleType>

    <xsd:element name="i8" type="dt:i8"/>

    <xsd:simpleType name="id">
        <xsd:annotation>
            <xsd:documentation>

                Valid for attributes only
                Equivalent to xsd:ID

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:ID"/>
    </xsd:simpleType>

    <xsd:simpleType name="idref">
        <xsd:annotation>
            <xsd:documentation>

                Valid for attributes only
                Equivalent to xsd:IDREF

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:IDREF"/>
    </xsd:simpleType>

    <xsd:simpleType name="idrefs">
        <xsd:annotation>
            <xsd:documentation>

                Valid for attributes only
                Equivalent to xsd:IDREFS

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:IDREFS"/>
    </xsd:simpleType>

    <xsd:simpleType name="int">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:integer

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:integer"/>
    </xsd:simpleType>

    <xsd:element name="int" type="dt:int"/>

    <xsd:simpleType name="nmtoken">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:NMTOKEN

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:NMTOKEN"/>
    </xsd:simpleType>

    <xsd:element name="nmtoken" type="dt:nmtoken"/>

    <xsd:simpleType name="nmtokens">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:NMTOKENS

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:NMTOKENS"/>
    </xsd:simpleType>

    <xsd:element name="nmtokens" type="dt:nmtokens"/>

    <xsd:simpleType name="notation">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:NOTATION

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:NOTATION"/>
    </xsd:simpleType>

    <xsd:element name="notation" type="dt:notation"/>

    <xsd:simpleType name="number">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:decimal

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:decimal"/>
    </xsd:simpleType>

    <xsd:element name="number" type="dt:number"/>

    <xsd:simpleType name="r4">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:float

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:float"/>
    </xsd:simpleType>

    <xsd:element name="r4" type="dt:r4"/>

    <xsd:simpleType name="r8">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:double

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:double"/>
    </xsd:simpleType>

    <xsd:element name="r8" type="dt:r8"/>

    <xsd:simpleType name="string">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:string

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>

    <xsd:element name="string" type="dt:string"/>

    <xsd:simpleType name="time">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:time with no timezone

                TODO: restrict -> force no timezone

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:time"/>
    </xsd:simpleType>

    <xsd:element name="time" type="dt:time"/>

    <xsd:simpleType name="time.tz">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:time with timezone

                TODO: restrict -> force timezone

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:time"/>
    </xsd:simpleType>

    <xsd:element name="time.tz" type="dt:time.tz"/>

    <xsd:simpleType name="ui1">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:unsignedByte

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:unsignedByte"/>
    </xsd:simpleType>

    <xsd:element name="ui1" type="dt:ui1"/>

    <xsd:simpleType name="ui2">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:unsignedShort

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:unsignedShort"/>
    </xsd:simpleType>

    <xsd:element name="ui2" type="dt:ui2"/>

    <xsd:simpleType name="ui4">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:unsignedInt

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:unsignedInt"/>
    </xsd:simpleType>

    <xsd:element name="ui4" type="dt:ui4"/>

    <xsd:simpleType name="ui8">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:unsignedLong

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:unsignedLong"/>
    </xsd:simpleType>

    <xsd:element name="ui8" type="dt:ui8"/>

    <xsd:simpleType name="uri">
        <xsd:annotation>
            <xsd:documentation>

                Equivalent to xsd:anyURI

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:anyURI"/>
    </xsd:simpleType>

    <xsd:element name="uri" type="dt:uri"/>

    <xsd:simpleType name="uuid">
        <xsd:annotation>
            <xsd:documentation>

                Hex octet string with optional hyphens

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:string">
            <xsd:pattern value="([0-9A-Fa-f]{4})([-]{,1}[0-9A-Fa-f]{4})*"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:element name="uuid" type="dt:uuid"/>

    <xsd:attribute name="dt" default="string">
        <xsd:simpleType>
            <xsd:restriction base="string">
                <xsd:enumeration value="bin.base64"/>
                <xsd:enumeration value="bin.hex"/>
                <xsd:enumeration value="boolean"/>
                <xsd:enumeration value="char"/>
                <xsd:enumeration value="date"/>
                <xsd:enumeration value="date.tz"/>
                <xsd:enumeration value="dateTime"/>
                <xsd:enumeration value="dateTime.tz"/>
                <xsd:enumeration value="entity"/>
                <xsd:enumeration value="entities"/>
                <xsd:enumeration value="enumeration"/>
                <xsd:enumeration value="fixed.14.4"/>
                <xsd:enumeration value="float"/>
                <xsd:enumeration value="i1"/>
                <xsd:enumeration value="i2"/>
                <xsd:enumeration value="i4"/>
                <xsd:enumeration value="i8"/>
                <xsd:enumeration value="id"/>
                <xsd:enumeration value="idref"/>
                <xsd:enumeration value="idrefs"/>
                <xsd:enumeration value="int"/>
                <xsd:enumeration value="nmtoken"/>
                <xsd:enumeration value="nmtokens"/>
                <xsd:enumeration value="notation"/>
                <xsd:enumeration value="number"/>
                <xsd:enumeration value="r4"/>
                <xsd:enumeration value="r8"/>
                <xsd:enumeration value="string"/>
                <xsd:enumeration value="time"/>
                <xsd:enumeration value="time.tz"/>
                <xsd:enumeration value="ui1"/>
                <xsd:enumeration value="ui2"/>
                <xsd:enumeration value="ui4"/>
                <xsd:enumeration value="ui8"/>
                <xsd:enumeration value="uri"/>
                <xsd:enumeration value="uuid"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:attribute>

</xsd:schema>
